use std::cell::{Cell, RefCell};
#[test]
fn test() {
    let c = Cell::new("asdf");
    let one = c.get();
    c.set("qwer");
    let two = c.get();
    println!("{},{}", one, two);
}
//Cell 类型针对的是实现了 Copy 特征的值类型

#[test]
fn test2() {
    let s = RefCell::new(String::from("hello, world"));
    let s1 = s.borrow();
    //let s2 = s.borrow_mut();

    println!("{}", s1);
}
//与 Cell 用于可 Copy 的值不同，RefCell 用于引用
// RefCell 只是将借用规则从编译期推迟到程序运行期，并不能帮你绕过这个规则
// RefCell 适用于编译期误报或者一个引用被在多处代码使用、修改以至于难于管理借用关系时
// 使用 RefCell 时，违背借用规则会导致运行期的 panic